# 一、系统模块
import logging  # 记录日志我们需要导入日志模块

# 二、django模块
from django.shortcuts import render   # django渲染页面模块
from django.http import HttpResponse, JsonResponse  # django的响应模块（本视图由于我们返回图片验证码需要使用它）

# 三、自己的库
from untils.captcha.captcha import captcha  # 导入生成图形验证码的第三方模块
from . import constants                     # 导入我们创建的用来存放常量的py文件
from user.models import User                # 导入我们写好的用户模型类
from untils.res_code import json_response   # 导入我们写好的json快捷函数

# 日志器
logger = logging.getLogger('django')  # 生成一个名叫django的日志器


# 1.生成图形验证码
def image_code_view(request):
    """
    功能：生成验证码
    url : /image_code/
    :param request:
    :return:
    """
    # 1. 生成验证码（随机生成字符和图片）
    text, image = captcha.generate_captcha()  # 调用该方法会给我们返回两个值，一个是验证码的文字内容，一个是验证码的图片
    # 2. 在后端保存验证码（为了之后校验验证码是否正确，所以现在我们需要保存验证码）
    request.session['image_code'] = text  # 将验证码文字部分存放在session中
    # 给验证码一个过期时间，为了方便日后修改，我们在校验app中创建一个constants.py的文件，用来存放常量
    # 导入方式为 from  .  import  constants
    request.session.set_expiry(constants.IMAGE_CODE_EXPIRES)  # 设置session过期时间
    # 3. 记录一个日志
    logger.info('Image_code:{}'.format(text))
    # 4. 返回验证码图片
    # image存储的是图片的二进制数据，content指定了返回的数据内容，
    # content_type指定了返回数据的类型，告诉浏览器我们返回的是一张图片
    return HttpResponse(content=image, content_type='image/jpg')


# 2.检查用户名是否注册（由于该方法只使用get访问，所以我们使用函数视图即可）
def check_username_view(request, username):
    """
    username 用来获取路径参数username，所以该username需要与url中设置的username名称相同
    函数功能：校验用户名
    url: /username/(?P<username>\w{5,20})/
    :param request:
    :param username:
    :return:
    """
    # # 到数据库查询数据并返回
    # data = {
    #     "errno": 0,
    #     "errmsg": "OK",
    #     "data": {
    #         "username": username ,  # 查询用户名
    #         "count": User.objects.filter(username=username).count()  # 用户查询数量
    #     },
    # }
    # # 返回json数据
    # return JsonResponse(data)
    data = {
            "username": username ,  # 查询用户名
            "count": User.objects.filter(username=username).count()  # 用户查询数量
    }
    # 返回json数据
    return json_response(data=data)

# 3.检查手机号码是否注册（由于该方法只使用get访问，所以我们使用函数视图即可）
def check_mobile_view(request, mobile):
    """
    函数功能：校验手机号码
    url: /mobile/(?P<mobile>1[3-9]\d{9})/
    :param request:
    :param username:
    :return:
    """
    # # 到数据库查询数据并返回
    # data = {
    #     "errno": 0,
    #     "errmsg": "OK",
    #     "data": {
    #         "mobile": mobile ,  # 查询手机号码
    #         "count": User.objects.filter(mobile=mobile).count()  # 手机号码查询数量
    #     },
    # }
    # # 返回json数据
    # return JsonResponse(data)
    # 到数据库查询数据并返回
    data = {
        "mobile": mobile,  # 查询手机号码
        "count": User.objects.filter(mobile=mobile).count()  # 手机号码查询数量
    }
    # 返回json数据
    return json_response(data=data)
